<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        //函数的作用  一次声明  多次调用

        //创建（6种）
        //1.函数声明     预编译
        // function fn(x,y){
        //     return x+y
        // }
        //2.匿名函数表达式
        // var a = function() {}
        //3.命名函数表达式     
        // var a = function fn() {
        // }
        //4.构造函数 (不推荐)
        // var fn = new Function("x", "y", "return x+y");
        // console.log(fn)
        //5.箭头函数
        //6.函数构造器

        //工厂模式
        // let o1 = {}
        // let o2 = new Object()
        // let o3 = Object.create()
        // let o4 = new Dog()
        // function o5(x, y) {   //工厂模式
        //     return {
        //         name: x,
        //         age: y
        //     }
        // }
        // let x = o5("xixi", 20);
        // console.log(x)

        // function fn(x) {

        //     if (x > 5) {
        //         return;
        //     }
        //     console.log(x)
        // }

        // let demo = fn(8)
        // console.log(demo)

        //arguments对象  伪数组
        // function fn() { //形参
        //     //console.log(Array.from(arguments)) //实参  
        //     //console.log(arguments.callee)  //返回的是函数的本身（基本上不使用）
        // }

        // fn(5, 2, 3, 4, 5, 6) //实参


        //length属性，是形参的个数
        // function fn(x, y, z) {

        // }
        // console.log(fn.length)




        //面试题
        // 定义一个对象，这个对象的属性不能被外界修改
        // let o = {
        //     x: "xixi"
        // };
        // Object.defineProperty(o, "x", {
        //     value: "xixi", //值
        //     writable: false, //是否可以修改
        //     enumerable: true, //是否可以枚举 遍历
        //     configurable: true //是否可以配置
        // })
        // o.x = "haha"
        // for (var key in o) {
        //     console.log(key)
        // }
        // console.log(o)





        //箭头函数   更加简洁
        // var fn = function(){}
        // var fn = ()=>{}

        // var fn = function(v) {
        //     return v;
        // }
        // console.log(fn(5))

        // var fn = (v, x) => {
        //     return v + x
        // }

        // console.log(fn(5, 10));

        // var fn = v => v;


        // let arr = [1, 2, 3, 4, 5];
        // let fn = arr.filter(function(item) {
        //     return item > 3
        // })
        // console.log(fn)

        // let newArr = arr.filter((item) => {
        //     return item > 3
        // })
        // console.log(newArr)
    </script>
</body>

</html>